package com.ctfo.ulcp.exp.core;

import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.EmbeddingMatch;
import dev.langchain4j.store.embedding.EmbeddingStore;

import java.util.List;
import java.util.Map;

public interface CrudEmbeddingStore extends EmbeddingStore<TextSegment> {


    /**
     * 指定哪些元数据查询的时候要返回。
     * 并且, 每条数据的ID也会根据这些元数据生成. 同样元数据的场合，后加的数据会覆盖之前的
     * 如果此方法返回null或空列表的时候，ID规则回退到原来的默认规则
     * 注意: 对于weaviate, 元数据的key不能为大写字母，会导致查询失败！！
     */
    List<String> specialMetaKeys();

    /**
     * 批量删除数据
     * @param refMeta 为空的场合删除整个集合
     */
    void batchDelete(Map<String, String> refMeta);

    /**
     * 删除整个集合
     */
    default void dropCollection() {
        batchDelete(null);
    }

    /**
     * 根据元数据字段查询
     * @param refMeta 不为空的场合搜索搜索按元数据过滤
     */
    List<EmbeddingMatch<TextSegment>> findRelevant(Embedding referenceEmbedding, Map<String, String> refMeta, int maxResults, double minScore);


}
